/**
 * APP WebView 相关工具函数
 */

/**
 * APP类型信息接口
 */
interface AppTypeInfo {
  isYixinliApp: boolean;
  isZiXunApp: boolean;
  isQingSuApp: boolean;
  isZiXunShiApp: boolean;
  isCikeApp: boolean;
  isWebviewMp: boolean;
}

/**
 * 获取APP类型信息
 * @returns APP类型信息对象
 */
export function getAppType(): AppTypeInfo {
  const userAgent = navigator.userAgent.toLowerCase();

  return {
    isYixinliApp: userAgent.includes('yixinliApp'),
    isZiXunApp: userAgent.includes('zixunApp'),
    isQingSuApp: userAgent.includes('qingsuApp'),
    isZiXunShiApp: userAgent.includes('zixunshiApp'),
    isCikeApp: userAgent.includes('cikeApp'),
    isWebviewMp: userAgent.includes('miniprogram'),
  };
}

/**
 * 在APP中打开WebView
 * @param url 要打开的URL
 * @param options 选项配置
 * @returns 是否成功打开
 */
export function openAppWebview(
  url: string,
  options: {
    hideNavigationBar?: boolean;
    isCurrentPageOpen?: number;
  } = {}
): boolean {
  const { hideNavigationBar = false, isCurrentPageOpen = 0 } = options;
  const appType = getAppType();

  // 检查是否有可用的bridge对象
  const bridge = (window as any).bridge;

  if (!bridge) {
    return false;
  }

  try {
    if (
      appType.isYixinliApp ||
      appType.isZiXunApp ||
      appType.isQingSuApp ||
      appType.isCikeApp
    ) {
      // 壹心理系列APP和CikeApp
      if (bridge.openWebView) {
        bridge.openWebView({
          url,
          isCurrentPageOpen,
          hideNavigationBar: hideNavigationBar ? 1 : 0,
        });
        return true;
      }
    } else if (appType.isZiXunShiApp) {
      // 咨询师APP
      if (bridge.openAppPage) {
        bridge.openAppPage({
          routeName: 'toWebView',
          param: JSON.stringify({
            url,
            hideNavigationBar,
          }),
        });
        return true;
      }
    }
  } catch (error) {
    console.error('打开WebView失败:', error);
  }

  return false;
}

/**
 * 判断是否应该在新WebView中打开
 * @param isOpenWebview 原始设置
 * @param defaultValue 默认值
 * @returns 最终是否在新WebView中打开
 */
export function shouldOpenInNewWebview(
  isOpenWebview: boolean,
  defaultValue: boolean = true
): boolean {
  const appType = getAppType();

  // 在APP环境中，默认在新WebView中打开
  if (
    appType.isYixinliApp ||
    appType.isZiXunApp ||
    appType.isQingSuApp ||
    appType.isZiXunShiApp ||
    appType.isCikeApp
  ) {
    return isOpenWebview !== false;
  }

  return defaultValue;
}

/**
 * 在APP中执行返回操作
 * @returns 是否成功执行返回
 */
export function goBackInApp(): boolean {
  const appType = getAppType();
  const bridge = (window as any).bridge;

  if (!bridge) {
    return false;
  }

  try {
    if (
      appType.isYixinliApp ||
      appType.isZiXunApp ||
      appType.isQingSuApp ||
      appType.isCikeApp
    ) {
      // 壹心理系列APP和CikeApp
      if (bridge.cancelWebView) {
        bridge.cancelWebView();
        return true;
      }
    } else if (appType.isZiXunShiApp) {
      // 咨询师APP
      if (bridge.goBack) {
        bridge.goBack();
        return true;
      }
    }
  } catch (error) {
    console.error('APP返回操作失败:', error);
  }

  return false;
}
